package ru.compft.common.data;

import ru.compft.common.utils.GlobalConstants;

import java.io.Serializable;

/**
 * User: ASUS
 * Date: 01.06.12
 * Time: 0:10
 * Класс представляющий "Права доступа к объектам"
 * Все поля класса только для чтения
 */
public class AppAcl implements Serializable {
    private static final long serialVersionUID = 7620363593325134210L;

    private Long objectId; // id объекта
    private String recipient;  // код роли или логин пользователя
    private Long principal; // 1=Пользователь,0=Роль
    private Long mask; // маска 1=READ, 2=WRITE, 4=CREATE , 8=DELETE , 16=ADMINISTRATION
    private String clazz; // полное имя класса объекта

    public Long getObjectId() {
        return objectId;
    }

    public void setObjectId(Long objectId) {
        this.objectId = objectId;
    }

    public String getRecipient() {
        return recipient;
    }

    public void setRecipient(String recipient) {
        this.recipient = recipient;
    }

    public Long getPrincipal() {
        return principal;
    }

    public void setPrincipal(Long principal) {
        this.principal = principal;
    }

    public Long getMask() {
        return mask != null ? mask : 0;
    }

    public void setMask(Long mask) {
        this.mask = mask;
    }

    public String getClazz() {
        return clazz;
    }

    public void setClazz(String clazz) {
        this.clazz = clazz;
    }

    /**
     * Форматируем объект по паттерну {mask}#{objectId}#{principal}#{recipient}
     *
     * @return
     */
    public String format() {
        final StringBuilder builder = new StringBuilder();
        builder.append(mask).append(GlobalConstants.SHARP)
                .append(objectId).append(GlobalConstants.SHARP)
                .append(principal).append(GlobalConstants.SHARP)
                .append(recipient);

        return builder.toString();
    }

    /**
     * Форматируем объект по паттерну {mask}#{objectId}#{principal}#{recipient}
     *
     * @return
     */
    public String formatUniqueKey() {
        final StringBuilder builder = new StringBuilder();
        builder.append(clazz).append(GlobalConstants.SHARP)
                .append(objectId).append(GlobalConstants.SHARP)
                .append(principal).append(GlobalConstants.SHARP)
                .append(recipient);

        return builder.toString();
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("AppAcl");
        sb.append("{objectId=").append(objectId);
        sb.append(", recipient='").append(recipient).append('\'');
        sb.append(", principal=").append(principal);
        sb.append(", mask=").append(mask);
        sb.append(", clazz='").append(clazz).append('\'');
        sb.append('}');
        return sb.toString();
    }
}
